<?php
/**
 * Controle de Tarefa
 * @filesource  06/04/2011
 * @author      Estrada Virtual <http://estradavirtual.com.br>
 * @copyright   Copyright <2011> Estrada Virtual
 * @package     <<application>>
 * @subpackage  <<application>>.application.controllers
 * @version     $Id$
 */
class tarefa_TarefaController extends App_Controller_Action
{

    public function listarAction()
    {
        $sfiltro = array();
        $fk_projeto = $this->_getParam('fk_projeto');
        if ($fk_projeto) {
            $sfiltro[] = 'fk_projeto = ' . $fk_projeto;
        }

        $fk_servico = $this->_getParam('fk_servico');
        if ($fk_servico) {
            $sfiltro[] = 'fk_servico = ' . $fk_servico;
        }

        if ($cs_situacao = $this->_getParam('cs_situacao')) {
            $sfiltro[] = "cs_situacao = '$cs_situacao'";
        }

        $tarefa = new Model_Tarefa();
        $this->view->rowSetTarefas = $tarefa->fetchAll($sfiltro, 'cs_situacao', 'st_nome');

        $usuario = new Model_Usuario();
        $rowSetUsuarios = $usuario->fetchAll();
        $aUsuarios = array();
        foreach ($rowSetUsuarios as $rowUsuario) {
            $aUsuarios[$rowUsuario->id_usuario] = $rowUsuario->st_nome;
        }
        $this->view->aUsuarios = $aUsuarios;
        $this->view->aSituacao = Model_Tarefa::getSituacoes();
    }

    public function adicionarAction()
    {
        $this->_helper->layout()->disableLayout();

        $fk_cliente = $this->_getParam('fk_cliente');
        if (!$fk_cliente) {
            return false;
        }

        $idUsuarioLogado = Zend_Auth::getInstance()->getIdentity()->id_usuario;

        if ($this->getRequest()->isPost()) {
            $this->_helper->viewRenderer->setNoRender(true);

            $dados = $this->_getAllParams();
            $dados['fk_usuario_cadastro'] = $idUsuarioLogado;
            $dados['dt_cadastro'] = date('Y-m-d H:i:s');
            $dados['cs_situacao'] = Model_Tarefa::SITUACAO_NAO_INICIADA;                          
            
            $tarefa = new Model_Tarefa();
            $idTarefa = $tarefa->gravar($dados);
           
            $rowTarefa = $tarefa->find($idTarefa)->current();
            
            $modelProcessoTarefa    = new Model_ProcessoTarefa();
            $rowProcessoTarefa = $modelProcessoTarefa->createRow();
            $rowProcessoTarefa->fk_processo = $dados['fk_processo'];
            $rowProcessoTarefa->fk_id_tarefa   = $idTarefa;
            $rowProcessoTarefa->dt_inicio   = $dados['dt_cadastro'];
            $rowProcessoTarefa->save();
            

            $modelHistorico = new Model_Historico();
            $rowHistorico = $modelHistorico->createRow();
            $rowHistorico->fk_usuario  = $idUsuarioLogado;
            $rowHistorico->st_titulo   = 'Criou a tarefa ' . $rowTarefa->st_nome;
            $rowHistorico->dt_cadastro = date('Y-m-d H:i:s');
            $rowHistorico->fk_cliente  = $fk_cliente;
            $rowHistorico->save();

            /*
            $rowProjeto = $rowTarefa->findParentModel_Projeto();
            $rowSetUsuarios = $rowProjeto->findModel_UsuarioViaModel_ProjetoUsuario();
            if (count($rowSetUsuarios)) {
                // Send email
                $this->view->rowUsuario    = $rowTarefa->findParentModel_Usuario();
                $this->view->rowTarefa     = $rowTarefa;
                $this->view->rowProjeto    = $rowProjeto;
                $emailBody = $this->view->render('email/tarefa-adicionar.phtml');

                $mail = new Ev_Mail('UTF8');
                $mail->setSubject('[CEV] Nova tarefa do projeto ' . $rowProjeto->st_nome);
                $mail->setBodyHtml($emailBody);
                foreach ($rowSetUsuarios as $rowUsuarioDestino) {
                    $mail->addTo($rowUsuarioDestino->st_email, $rowUsuarioDestino->st_nome);
                }
                $mail->send();
            }
            */

            if ($this->_getParam('fk_projeto')) {
                $urlRedirect = 'projeto/projeto/visualizar/id/' . $this->_getParam('fk_projeto');
            } else {
                $urlRedirect = 'servico/servico/visualizar/id/' . $this->_getParam('fk_servico');
            }
            return $this->_redirect($urlRedirect);
        }

        $processo = new Model_ProjetoProcesso();
        $rowProcesso = $processo->carregarArrayDadosReference();
        unset($rowProcesso["fk_processo"]['']);
        $this->view->fk_processo = $rowProcesso['fk_processo'];
        unset($rowProcesso);
                      
        $cliente = new Model_Cliente();
        $rowCliente  = $cliente->find($fk_cliente)->current();
        $this->view->aPrevisao   = Model_Tarefa::getPrevisao();
        $this->view->fk_cliente  = $rowCliente->id_cliente;
        $this->view->clienteNome = $rowCliente->st_nome;
        unset($rowCliente);

        if ($fk_projeto = $this->_getParam('fk_projeto')) {
            $projeto = new Model_Projeto();
            $rowProjeto  = $projeto->find($fk_projeto)->current();

            // @FIXME Ver como tratar
            if ($rowProjeto->fk_cliente != $fk_cliente) {
                echo 'Projeto não relacionado ao cliente'; die;
            }

            $this->view->fk_projeto  = $rowProjeto->id_projeto;
            $this->view->projetoNome = $rowProjeto->st_nome;
            unset($rowProjeto);
        }

        if ($fk_servico = $this->_getParam('fk_servico')) {
            $servico = new Model_Servico();
            $rowServico  = $servico->find($fk_servico)->current();

            // @FIXME Ver como tratar
            if ($rowServico->fk_cliente != $fk_cliente) {
                echo 'Projeto não relacionado ao cliente'; die;
            }

            $this->view->fk_servico     = $rowServico->id_servico;
            $this->view->rowTipoServico = $rowServico->findParentModel_TipoServico();
            unset($rowServico);
        }

        $this->_carregarUsuarios();
        $this->view->usuarioNome = Zend_Auth::getInstance()->getIdentity()->st_nome;
        $this->view->idUsuarioLogado = $idUsuarioLogado;
    }

    public function visualizarAction()
    {
        $idTarefa = $this->_getParam('id');

        $tarefa = new Model_Tarefa();
        $rowTarefa = $tarefa->find($idTarefa)->current();
        
        //Etapas da tarefa
        $modelProcesso = new Model_Processo();
        $processos= $modelProcesso->getProcessoPorProjeto($rowTarefa->fk_projeto);
        $processosTarefa = $rowTarefa->findModel_ProcessoTarefa();
        
        //$processosTarefa = $processosTarefa->toArray();
        $etapas = array();
        foreach($processos as $key=> $processo) {
        	foreach($processosTarefa as $processoTarefa) {
        		if($processo->id_processo == $processoTarefa->fk_processo) {
        			$etapas[$key] = array($processo->st_nome,'progtrckr-done');
        		}  else if(!array_key_exists($key,$etapas)) {
        			$etapas[] = array($processo->st_nome,'progtrckr-todo');
        		}
        	}
        }
        

        $this->view->fk_processos = $etapas;
        
        if ($rowProjeto = $rowTarefa->findParentModel_Projeto()) {
            $this->view->clienteNome = $rowProjeto->findParentModel_Cliente()->st_nome;
            $this->view->fk_cliente  = $rowProjeto->findParentModel_Cliente()->id_cliente;
            $this->view->projetoNome = $rowProjeto->st_nome;
          
                        
            
        } elseif ($rowServico = $rowTarefa->findParentModel_Servico()) {
            $this->view->clienteNome = $rowServico->findParentModel_Cliente()->st_nome;
            $this->view->fk_cliente  = $rowServico->findParentModel_Cliente()->id_cliente;
            $this->view->tipoServicoNome = $rowServico->findParentModel_TipoServico()->st_nome;
        }

        $fk_tarefa_atual = Model_Usuario::getTaretaAtual();
        if ($fk_tarefa_atual == $idTarefa) {
            $modelTarefaAtividade = new Model_TarefaAtividade();
            $this->view->rowAtividade = $modelTarefaAtividade->getAtual($idTarefa, Zend_Auth::getInstance()->getIdentity()->id_usuario);
        }

        // Total de horas
        $this->view->qt_horas_total = $tarefa->somarHoras($idTarefa);

        $this->view->rowTarefa   = $rowTarefa;
        $this->view->aSituacoes  = $tarefa->getSituacoes();
        $select = $tarefa->select()->order('dt_cadastro desc');
        $this->view->rowSetAtividades = $rowTarefa->findModel_TarefaAtividade($select);
        $this->view->fk_tarefa_atual  = $fk_tarefa_atual;
        $this->_carregarUsuarios();
    }

    public function finalizarAction()
    {
        if (!$idTarefa = $this->_getParam('id_tarefa')) {
            $this->_addMessage('Não foi passada a tarefa a ser finalizada', 'tarefa');
        }

        $tarefa = new Model_Tarefa();
        $rowTarefa = $tarefa->find($idTarefa)->current();
        if ($rowTarefa->fk_usuario_cadastro != Zend_Auth::getInstance()->getIdentity()->id_usuario) {
            $modelUsuario = new Model_Usuario();
            $st_nome = $modelUsuario->find($rowTarefa->fk_usuario_cadastro)->current()->st_nome;
            return $this->_addMessage('Só o usuário que criou a tarefa pode finalizar [' . $st_nome . ']', 'tarefa/tarefa/visualizar/id/' . $idTarefa);;
        }

        $rowTarefa->dt_fim = date('Y-m-d H:i:s');
        $rowTarefa->cs_situacao = Model_Tarefa::SITUACAO_FINALIZADA;
        $rowTarefa->save();

        $rowProjeto     = $rowTarefa->findParentModel_Projeto();

        if (Model_Usuario::getTaretaAtual() == $idTarefa) {
            $modelUsuario = new Model_Usuario();
            $modelUsuario->sairTarefa(Zend_Auth::getInstance()->getIdentity()->id_usuario);
        }

        $modelHistorico = new Model_Historico();
        $rowHistorico = $modelHistorico->createRow();
        $rowHistorico->fk_usuario  = Zend_Auth::getInstance()->getIdentity()->id_usuario;
        $rowHistorico->st_titulo   = 'Finalizou a tarefa ' . $rowTarefa->st_nome;
        $rowHistorico->dt_cadastro = date('Y-m-d H:i:s');
        $rowHistorico->fk_cliente  = $rowProjeto->fk_cliente;
        $rowHistorico->save();

        /*
        $rowSetUsuarios = $rowProjeto->findModel_UsuarioViaModel_ProjetoUsuario();
        if (count($rowSetUsuarios)) {
            // Send email
            $this->view->usuarioNome   = Zend_Auth::getInstance()->getIdentity()->st_nome;
            $this->view->rowTarefa     = $rowTarefa;
            $this->view->rowProjeto    = $rowTarefa->findParentModel_Projeto();
            $emailBody = $this->view->render('email/tarefa-finalizar.phtml');

            $mail = new Ev_Mail('UTF8');
            $mail->setSubject('[CEV] tarefa ' . $rowTarefa->st_nome . ' finalizada');
            $mail->setBodyHtml($emailBody);
            foreach ($rowSetUsuarios as $rowUsuarioDestino) {
                $mail->addTo($rowUsuarioDestino->st_email, $rowUsuarioDestino->st_nome);
            }
            $mail->send();
        }
        */
        $this->_redirect('tarefa');
    }

    public function iniciarAction()
    {
        if (!$idTarefa = $this->_getParam('id_tarefa')) {
            $this->_addMessage('Não foi passada a tarefa a ser iniciada', 'tarefa');
        }

        $tarefa = new Model_Tarefa();
        $rowTarefa = $tarefa->find($idTarefa)->current();

        $rowTarefa->dt_inicio = date('Y-m-d H:i:s');
        $rowTarefa->cs_situacao = Model_Tarefa::SITUACAO_ABERTA;
        $rowTarefa->save();

        // Atividade
        $date = date('Y-m-d H:i:s');
        $dados = array('fk_tarefa'    => $idTarefa,
               'fk_usuario'   => Zend_Auth::getInstance()->getIdentity()->id_usuario,
               'st_atividade' => 'Tarefa iniciada',
               'qt_horas'     => 0,
               'dt_cadastro'  => $date,
               'dt_fim'       => $date
              );
        $tarefaAtividade = new Model_TarefaAtividade();
        $rowTarefaAtividade = $tarefaAtividade->createRow($dados);
        $rowTarefaAtividade->save();

        $rowProjeto     = $rowTarefa->findParentModel_Projeto();

        // Histórico
        $modelHistorico = new Model_Historico();
        $rowHistorico = $modelHistorico->createRow();
        $rowHistorico->fk_usuario  = Zend_Auth::getInstance()->getIdentity()->id_usuario;
        $rowHistorico->st_titulo   = 'Iniciada a tarefa ' . $rowTarefa->st_nome;
        $rowHistorico->fk_cliente  = $rowProjeto->fk_cliente;
        $rowHistorico->save();

        $idUsuario = Zend_Auth::getInstance()->getIdentity()->id_usuario;

        $modelUsuario = new Model_Usuario();
        $modelUsuario->entrarTarefa($idUsuario, $idTarefa);

        /*
        $rowSetUsuarios = $rowProjeto->findModel_UsuarioViaModel_ProjetoUsuario();
        if (count($rowSetUsuarios)) {
            // Send email
            $this->view->usuarioNome   = Zend_Auth::getInstance()->getIdentity()->st_nome;
            $this->view->rowTarefa     = $rowTarefa;
            $this->view->rowProjeto    = $rowTarefa->findParentModel_Projeto();
            $emailBody = $this->view->render('email/tarefa-iniciar.phtml');

            $mail = new Ev_Mail('UTF8');
            $mail->setSubject('[CEV] tarefa ' . $rowTarefa->st_nome . ' iniciada');
            $mail->setBodyHtml($emailBody);
            foreach ($rowSetUsuarios as $rowUsuarioDestino) {
                $mail->addTo($rowUsuarioDestino->st_email, $rowUsuarioDestino->st_nome);
            }
            $mail->send();
        }
        */
        $this->_redirect('tarefa/tarefa/visualizar/id/' . $rowTarefa->id_tarefa);
    }

    public function congelarAction()
    {
        $idTarefa    = $this->_getParam('id_tarefa');
        $tarefa      = new Model_Tarefa();
        $rowTarefa   = $tarefa->find($idTarefa)->current();

        if ($this->getRequest()->isPost()) {
            $stAtividadeOriginal = $this->_getParam('st_atividade');
            $stAtividade = "Congelando... \n\r <br>" . $stAtividadeOriginal;

            if (Model_Usuario::getTaretaAtual() == $idTarefa) {
                $modelUsuario = new Model_Usuario();
                $modelUsuario->sairTarefa(Zend_Auth::getInstance()->getIdentity()->id_usuario);
            }

            // Muda situacao da tarefa
            $tarefa = new Model_Tarefa();
            $rowTarefa->cs_situacao = Model_Tarefa::SITUACAO_CONGELADA;
            $rowTarefa->save();


            // Gravar atividade
//            $dados = array('fk_tarefa'    => $idTarefa,
//                           'st_atividade' => $stAtividade
//                          );
//            $tarefaAtividade = new Model_TarefaAtividade();
//            $rowTarefaAtividade = $tarefaAtividade->createRow($dados);
//            $rowTarefaAtividade->save();
//
            // Grava o hstorico
//            $rowProjeto = $rowTarefa->findParentModel_Projeto();
//            $modelHistorico = new Model_Historico();
//            $rowHistorico = $modelHistorico->createRow();
//            $rowHistorico->st_titulo   = 'Congelou a tarefa ' . $rowTarefa->st_nome;
//            $rowHistorico->fk_cliente  = $rowProjeto->fk_cliente;
//            $rowHistorico->save();

            $this->_addMessage('Tarefa congelada', 'tarefa');
        }
        $this->view->id_tarefa = $idTarefa;
    }

    public function encaminharAction()
    {
        $idTarefa    = $this->_getParam('id_tarefa');
        $tarefa      = new Model_Tarefa();
        $rowTarefa   = $tarefa->find($idTarefa)->current();

        if ($this->getRequest()->isPost()) {
            $fkUsuario   = $this->_getParam('fk_usuario');
            $stAtividadeOriginal = $this->_getParam('st_atividade');
            $stAtividade = "Encaminhado... \n\r <br>" . $stAtividadeOriginal;

            if ($rowTarefa->fk_usuario != $fkUsuario) {
                // Gravar atividade
                $date = date('Y-m-d H:i:s');
                $dados = array('fk_tarefa'    => $idTarefa,
                               'fk_usuario'   => Zend_Auth::getInstance()->getIdentity()->id_usuario,
                               'st_atividade' => $stAtividade,
                               'qt_horas'     => 0,
                               'dt_cadastro'  => $date,
                               'dt_fim'       => $date
                              );

                $tarefaAtividade = new Model_TarefaAtividade();
                $rowTarefaAtividade = $tarefaAtividade->createRow($dados);
                $rowTarefaAtividade->save();

                $rowProjeto = $rowTarefa->findParentModel_Projeto();

                if (Model_Usuario::getTaretaAtual() == $idTarefa) {
                    $modelUsuario = new Model_Usuario();
                    $modelUsuario->sairTarefa(Zend_Auth::getInstance()->getIdentity()->id_usuario);
                }

                $modelHistorico = new Model_Historico();
                $rowHistorico = $modelHistorico->createRow();
                $rowHistorico->fk_usuario  = Zend_Auth::getInstance()->getIdentity()->id_usuario;
                $rowHistorico->st_titulo   = 'Encaminhou a tarefa ' . $rowTarefa->st_nome;
                $rowHistorico->dt_cadastro = date('Y-m-d H:i:s');
                $rowHistorico->fk_cliente  = $rowProjeto->fk_cliente;
                $rowHistorico->save();

                // Encaminhar
                $rowTarefa->fk_usuario = $fkUsuario;
                $rowTarefa->save();

                $rowUsuarioDestino = $rowTarefa->findParentModel_Usuario();

                // Send email
                $this->view->rowUsuario    = $rowUsuarioDestino;
                $this->view->rowTarefa     = $rowTarefa;
                $this->view->rowProjeto    = $rowProjeto;
                $this->view->usuarioOrigem = Zend_Auth::getInstance()->getIdentity()->st_nome;
                $this->view->st_atividade = $stAtividadeOriginal;
                $emailBody = $this->view->render('email/tarefa-encaminhar.phtml');

                $mail = new Ev_Mail('UTF8');
                $translate = Zend_Registry::get('Zend_Translate');
                $mail->setSubject('[CEV] Tarefa encaminhada');
                $mail->addTo($rowUsuarioDestino->st_email, $rowUsuarioDestino->st_nome);
                $mail->setBodyHtml($emailBody);
                $mail->send();
            }
            $this->_addMessage('Tarefa encaminhada', 'projeto/projeto/visualizar/id/' . $rowTarefa->fk_projeto);
        }

        $rowProjeto = $rowTarefa->findParentModel_Projeto();
        $rowSetUsuarios = $rowProjeto->findModel_UsuarioViaModel_ProjetoUsuario();
        $aUsuarios = array();
        foreach ($rowSetUsuarios as $rowUsuario) {
            $aUsuarios[$rowUsuario->id_usuario] = $rowUsuario->st_nome;
        }
        $this->view->aUsuarios = $aUsuarios;
        $this->view->id_tarefa = $idTarefa;
    }

    public function gravarAtividadeAction()
    {
        $idTarefa    = $this->_getParam('id_tarefa');
        $stAtividade = $this->_getParam('st_atividade');
        $qtHoras     = $this->_getParam('qt_horas', 0);

        if (Model_Usuario::getTaretaAtual() != $idTarefa) {
            return $this->_addMessage('Você não esta alocado nessa tarefa', 'tarefa/tarefa/visualizar/id/' . $idTarefa);
        }

        $idUsuario = Zend_Auth::getInstance()->getIdentity()->id_usuario;

        $tarefaAtividade = new Model_TarefaAtividade();
        $tarefaAtividade->gravarAtividade($idTarefa, $idUsuario, $stAtividade);

        if ($this->_getParam('ajax', false)) {
            $rowTarefaAtividade = $tarefaAtividade->getAtual($idTarefa, $idUsuario);

            $retorno = array('st_duracao' => $rowTarefaAtividade->qt_horas,
                             'st_atividade' => nl2br($rowTarefaAtividade->st_atividade));

            return $this->_helper->json($retorno);
        }
        $this->_redirect('tarefa/tarefa/visualizar/id/' . $idTarefa);
    }

    public function mudarDataAction()
    {
        $idTarefa = $this->_getParam('id_tarefa');

        $tarefa = new Model_Tarefa();
        $rowTarefa = $tarefa->find($idTarefa)->current();

        if ($this->getRequest()->isPost()) {
            $dtPrevisaoInicio = $this->_getParam('dt_previsao_inicio');
            $dateInicio = new Zend_Date($dtPrevisaoInicio, 'pt_BR');
            $dtPrevisaoInicio = $dateInicio->get('Y-M-d');

            $dtPrevisaoFim = $this->_getParam('dt_previsao_fim');
            $dateFim = new Zend_Date($dtPrevisaoFim, 'pt_BR');
            $dtPrevisaoFim = $dateFim->get('Y-M-d');

            if ($dateInicio->isLater($dtPrevisaoFim)) {
                $this->_addMessage('Data inicio maior que data fim', 'tarefa/tarefa/visualizar/id/' . $idTarefa);
            }

            $rowTarefa->dt_previsao_inicio = $dtPrevisaoInicio;
            $rowTarefa->dt_previsao_fim    = $dtPrevisaoFim;
            $rowTarefa->save();
            $this->_addMessage('Data modificada', 'tarefa/tarefa/visualizar/id/' . $idTarefa);
        }

        $this->view->rowTarefa = $rowTarefa;
    }

    public function entrarAction()
    {
        $idTarefa = $this->_getParam('id_tarefa');
        $idUsuario = Zend_Auth::getInstance()->getIdentity()->id_usuario;

        $modelUsuario = new Model_Usuario();
        $modelUsuario->entrarTarefa($idUsuario, $idTarefa);

        $this->_addMessage('Você foi alocado na tarefa', 'tarefa/tarefa/visualizar/id/' . $idTarefa);
    }

    public function sairAction()
    {
        $idTarefa = $this->_getParam('id_tarefa');
        $idUsuario = Zend_Auth::getInstance()->getIdentity()->id_usuario;

        $modelUsuario = new Model_Usuario();
        $modelUsuario->sairTarefa($idUsuario);

        $this->_redirect('tarefa');
    }
}
